package com.virtualightning.mvvm.impl.adapter

/**
 *  Anchor : Create by CimZzz
 *  Time : 2021/12/28 19:10
 *  万能数据适配器 View Model 接口
 *  考虑到可能会绑定多个 Adapter，所以每个回调方法都有一个适配器键值表示所属某个适配器
 */
interface IUniverseAdapterViewModel {
	/**
	 * 适配器附着回调
	 * 当适配器与当前 ViewModel 进行绑定后，会触发该接口一次
	 * @param adapterKey Any 适配器数据
	 * @param adapter UniverseAdapter 万能适配器
	 */
	fun onAdapterAttach(adapterKey: Any, adapter: UniverseAdapter)

	/**
	 * 适配器分离回调
	 * 当适配器与当前 ViewModel 进行解绑后，会触发该接口一次
	 * @param adapterKey Any 适配器数据
	 * @param adapter UniverseAdapter 万能适配器
	 */
	fun onAdapterDetach(adapterKey: Any, adapter: UniverseAdapter)

	/**
	 * 请求初始化适配器数据
	 * @param adapterKey Any 适配器键值
	 * @param proxy InitAdapterProxy 初始化适配器代理
	 */
	fun requestAdapterInit(adapterKey: Any, proxy: InitAdapterProxy)

	/**
	 * 请求加载更多适配器数据
	 * @param adapterKey Any 适配器键值
	 * @param proxy LoadMoreAdapterProxy 加载更多适配器代理
	 */
	fun requestAdapterLoadMore(adapterKey: Any, proxy: LoadMoreAdapterProxy)

	/**
	 * 请求预加载适配器数据
	 * @param adapterKey Any 适配器键值
	 * @param proxy PreloadAdapterProxy 预加载适配器代理
	 */
	fun requestAdapterPreload(adapterKey: Any, proxy: PreloadAdapterProxy)

	/**
	 * 接收到适配器传来的指令
	 * @param adapterKey Any 适配器键值
	 * @param command AdapterCommand 适配器指令
	 */
	fun onAdapterCommand(adapterKey: Any, command: AdapterCommand)
}